// Decompiled on 周六 2月 22 19:31:49 CST 2025 with Zomboid Decompiler v0.1.3 using Vineflower.
package zombie;

public interface ISoundSystem {
    void init();

    void update();

    void purge();

    void fadeOutAll(float fSeconds);

    zombie.ISoundSystem.ISoundInstance playSound(
        zombie.ISoundSystem.SoundFormat format, String path, String rootName, int nVariants, boolean bStreaming, boolean bLooped, float fVolume
    );

    zombie.ISoundSystem.ISoundInstance playSound(
        zombie.ISoundSystem.SoundFormat format, String path, String rootName, int nVariants, boolean bStreaming, boolean bLooped, float fVolume, float fPanning
    );

    zombie.ISoundSystem.ISoundInstance playSound(
        zombie.ISoundSystem.SoundFormat format,
        String path,
        String rootName,
        int nVariants,
        boolean bStreaming,
        boolean bLooped,
        float fVolume,
        float fPanning,
        float fPitch
    );

    zombie.ISoundSystem.ISoundInstance playSound(
        zombie.ISoundSystem.SoundFormat format, String path, String rootName, boolean bStreaming, boolean bLooped, float fVolume
    );

    zombie.ISoundSystem.ISoundInstance playSound(
        zombie.ISoundSystem.SoundFormat format, String path, String rootName, boolean bStreaming, boolean bLooped, float fVolume, float fPanning
    );

    zombie.ISoundSystem.ISoundInstance playSound(
        zombie.ISoundSystem.SoundFormat format, String path, String rootName, boolean bStreaming, boolean bLooped, float fVolume, float fPanning, float fPitch
    );

    void cacheSound(zombie.ISoundSystem.SoundFormat format, String path, String rootName, int nVariants);

    void cacheSound(zombie.ISoundSystem.SoundFormat format, String path, String rootName);

    void clearSoundCache();

    int countInstances(String rootName);

    void setInstanceLimit(String rootName, int limit, zombie.ISoundSystem.InstanceFailAction onFail);

    public interface ISoundInstance {
        boolean isStreamed();

        boolean isLooped();

        boolean isPlaying();

        int countInstances();

        void setLooped(boolean bLoop);

        void pause();

        void stop();

        void play();

        void blendVolume(float fVolume, float fSeconds, boolean bAutoStopWhenSilent);

        void setVolume(float fVolume);

        float getVolume();

        void setPanning(float fVolume);

        float getPanning();

        void setPitch(float fVolume);

        float getPitch();

        boolean disposed();
    }

    public static enum InstanceFailAction {
        FailToPlay,
        StopOldest,
        StopRandom;
    }

    public static enum SoundFormat {
        Ogg,
        Wav;
    }
}
